package dao

import (
	"time"
)

// 这是 Download 的全局公开dao对象，被service层调用!
var DownloadDao = downloadDao{}

// 下载信息表
// 这是 download表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Download struct {
	Id          int32     `json:"id" form:"id" db:"id" v:"id"`
	Version     string    `json:"version" form:"version" db:"version" v:"version" gm:"version"`        // 版本号
	Filename    string    `json:"filename" form:"filename" db:"filename" v:"filename"`                 // 文件名
	Kind        string    `json:"kind" form:"kind" db:"kind" v:"kind"`                                 // 类型
	Os          string    `json:"os" form:"os" db:"os" v:"os"`                                         // 操作系统
	Arch        string    `json:"arch" form:"arch" db:"arch" v:"arch"`                                 // 架构
	Size        int32     `json:"size" form:"size" db:"size" v:"size"`                                 // 大小,单位 MB
	Checksum    string    `json:"checksum" form:"checksum" db:"checksum" v:"checksum"`                 // SHA1/256 校验和
	IsRecommend int8      `json:"is_recommend" form:"is_recommend" db:"is_recommend" v:"is_recommend"` // 是否推荐(推荐的高亮显示)
	Category    int8      `json:"category" form:"category" db:"category" v:"category"`                 // 0-Archived versions; 1-Stable versions; 2-Unstable versions;
	Sort        int32     `json:"sort" form:"sort" db:"sort" v:"sort"`                                 // 排序，越大越靠前
	Times       int32     `json:"times" form:"times" db:"times" v:"times"`                             // 下载次数
	CreatedAt   time.Time `json:"created_at" form:"created_at" db:"created_at" v:"created_at"`
}

// 注意:这是 Download 的私有dao对象，只能在dao层内使用!
type downloadDao struct {
	InsertTemplate func(arg Download) (int64, error)          //插入一条记录
	UpdateTemplate func(arg Download) (int64, error)          //更新一条记录
	DeleteTemplate func(id int64) (int64, error)              `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Download, error)           `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg DownloadList) ([]Download, error) //模糊分页查询
}

/*
// 这是 download 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type DownloadPostman struct {
id
version
filename
kind
os
arch
size
checksum
is_recommend
category
sort
times
created_at

}*/

// 这是 download 表的批量请求参数
type DownloadReq struct {
	List []Download `json:"list" form:"list"`
}

// 这是 downloadDao.List()方法的请求参数
type DownloadList struct {
	Page
}
